package loja;

import helpers.Banco;
import helpers.Categoria;

import java.rmi.RemoteException;
import java.sql.Date;
import java.util.Scanner;
import java.util.TreeMap;

import exceptions.ClienteErroLoginException;
import exceptions.ClienteJaExistenteException;
import exceptions.ClienteNaoEncontradoException;
import exceptions.ProdutoJaExistenteException;

public class TestaTudo {

	/**
	 * @param args
	 */

	public Servidor servidor;

	public static void main(String[] args) {
		TestaTudo a = new TestaTudo();
		a.go();
	}

	public void go() {

		servidor = new Servidor();

		boolean menu = true;

		while (menu) {
			System.out.println("Entre com a opcao");
			System.out
					.println("1-Cria Tabela Cliente \n2-Cria Tabela Produto\n"
							+ "3-Insere Clientes\n4-Recupera Cliente\n5-Recupera Produto\n"
							+ "6-Insere Produto\n7-Update Cliente\n8-Seta Qnt Estoque\n"
							+ "9-Seta Qnt Carrinho\n10-Esvazia Carrinho\n11-Retira Produto ao"
							+ "carrinho\n12-Adiciona Produto ao carrinh\n13 Recupera Senha\n98-Drop Tables\n"
							+ "99-Exit");
			Scanner scanner = new Scanner(System.in);
			int opcao;
			opcao = scanner.nextInt();

			switch (opcao) {

			case 1:
				System.out.println("Criando tabela cliente...");
				String sql = "create table Cliente ( "
						+ "id_cliente INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY CONSTRAINT id_cliente PRIMARY KEY,"
						+ "nome varchar(80) NOT NULL,"
						+ "cpf varchar(16) NOT NULL,"
						+ "credito double default 0.0,"
						+ "end_rua varchar(100) NOT NULL,"
						+ "end_cep varchar(14) NOT NULL,"
						+ "end_num varchar(6) NOT NULL,"
						+ "end_add varchar(255) default NULL,"
						+ "telefone varchar(20) default NULL,"
						+ "login varchar(30) NOT NULL,"
						+ "passwd varchar(100) NOT NULL,"
						+ "email varchar(200) NOT NULL," + "UNIQUE (cpf),"
						+ "UNIQUE (login), " + "UNIQUE (email) )";
				boolean bool = Banco.executeQuery(sql);
				if (bool) {
					System.out.println("Criou Clientes com sucesso");
				}
				break;

			case 2:
				System.out.println("Criando tabela produto...");
				String sql2 = "create table Produto ( "
						+ "id_produto INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY CONSTRAINT id_produto PRIMARY KEY,"
						+ "qtd_estoque int default 0,"
						+ "qtd_carrinho int default 0,"
						+ "nome varchar(100) NOT NULL, descricao varchar(255),"
						+ "vl_venda double NOT NULL,"
						+ "vl_compra double NOT NULL,"
						+ "fabricante varchar(100) default 'N/A',"
						+ "imagem blob," + "dt_fabricacao date default NULL,"
						+ "categoria int NOT NULL)";
				boolean bool2 = Banco.executeQuery(sql2);
				if (bool2) {
					System.out.println("Criou produtos com sucesso");
				}
				break;

			case 3:
				System.out.println("Inserindo Cliente...");
				Cliente n = null;
				try {
					n = Cliente.adicionarCliente("Bruno",
							"doravante2@gmail.com", "doravante", "bla",
							"123.428.367-08", "3351-6332", "Gustavo Martins",
							"60", "21.220-480", 100.0);
					n.setEnderecoAdicional("apto202"); // VEEEEEEEEEEEEEER!
					Cliente.cadastrouCliente(n);
					n = Cliente.adicionarCliente("Thalles",
							"thallesr@gmail.com", "thallesr", "bla",
							"123.428.367-01", "3106-2008", "Gustavo Martins",
							"60", "21.220-480", 100.0);
					n.setEnderecoAdicional("apto302");
					Cliente.cadastrouCliente(n);
				} catch (ClienteJaExistenteException e) {
					// TODO Auto-generated catch block
					System.out.println("Cliente ja existente.");
				}

				if (n != null) {
					System.out.println("Criou cliente com sucesso");
				}

				break;

			case 4:
				Cliente n2 = null;
				System.out.println("Recuperando cliente...");
				Scanner scanner2 = new Scanner(System.in);
				String login = scanner2.next();
				String senha = scanner2.next();
				try {

					n2 = Cliente.getClienteByLogin(login, senha);
					System.out.println(n2.getNome() + " recuperado!");
				} catch (ClienteNaoEncontradoException e) {
					System.out.println(e.getMessage());
				} catch (ClienteErroLoginException e) {
					System.out.println(e.getMessage());
				}
				break;
			case 6:
				System.out.println("Inserindo Produtos...");
				try {
					java.util.Date data = new java.util.Date();
					Produto.adicionaProduto(10, 10.0, 20.0, "notebook", "dell",
							new Date(data.getTime()), Categoria.NOTEBOOK);
				} catch (ProdutoJaExistenteException e) {
					System.out.println(e.getMessage());
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				break;

			case 7:
				System.out.println("Updatando cliente...");

				System.out.println("Cliente updatado.");
				break;
			case 8:
				Produto produto = null;
				System.out.println("Setando quantidade Estoque...");
				produto = Produto.getProdutoById(1);
				produto.adicionaQuantidadeEstoque(30);
				produto.retiraQuantidadeEstoque(2);
				System.out.println("Quantidade do Estoque setada.");
				break;
			case 9:
				Produto produto2 = null;
				System.out.println("Setando quantidade Carrinho...");
				produto2 = Produto.getProdutoById(1);
				produto2.adicionaQuantidadeCarrinho(30);
				produto2.retiraQuantidadeCarrinho(2);
				System.out.println("Quantidade do Carrinho setada.");
				break;

			case 10:
				System.out.println("Esvaziando o carrinho...");
				TreeMap<Produto, Integer> treeMapProduto = new TreeMap<Produto, Integer>();
				Produto produto3 = Produto.getProdutoById(1);
				treeMapProduto.put(produto3, 5);
				System.out.println("Quantidade Carrinho antes:"
						+ produto3.getQuantidadeCarrinho());
				// try {
				// servidor.esvaziarCarrinho(treeMapProduto);
				// } catch (RemoteException e1) {
				// TODO Auto-generated catch block
				// e1.printStackTrace();
				// }
				System.out.println("Quantidade Carrinho depois:"
						+ produto3.getQuantidadeCarrinho());
				System.out.println("Carrinho esvaziado.");
				break;
			case 11:
				System.out.println("Retirando produto do carrinho...");
				Produto produto4 = Produto.getProdutoById(1);
				System.out.println("Qnt produto antes:"
						+ produto4.getQuantidadeCarrinho());
				try {
					servidor.removeProdutoCarrinho(produto4, 5);
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("Qnt produto depois:"
						+ produto4.getQuantidadeCarrinho());
				System.out.println("Produto retirado do carrinho.");
				break;
			case 12:
				System.out.println("Adicionando produto do carrinho...");
				Produto produto5 = Produto.getProdutoById(1);
				System.out.println("Qnt produto antes:"
						+ produto5.getQuantidadeCarrinho());
				try {
					servidor.adicionaAoCarrinho(produto5, 5);
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("Qnt produto depois:"
						+ produto5.getQuantidadeCarrinho());
				System.out.println("Produto adicionado carrinho.");
				break;
			case 13:
				System.out.println("Recuperando Senha");
				try {
					Cliente.esqueceuSenha("thallesr");
				} catch (ClienteNaoEncontradoException e) {
					System.out.println(e.getMessage());
				}
				break;
			case 98:
				Banco.executeQuery("DROP TABLE cliente");
				Banco.executeQuery("DROP TABLE produto");
				break;

			case 99:
				System.out.println("Exit");
				System.exit(0);
				break;

			}
		}
	}
}
